﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int DataType;

typedef struct ListNode {
	DataType data;
	struct ListNode* next;
}ListNode;

// 带头单链表-工具函数
// 动态申请节点
ListNode* BuyListNode(DataType elem);


// 带头单链表-基本操作函数
// 带头单链表初始化
void SingleHeadListInit(ListNode** list);
// 带头单链表头部插入
void SingleHeadListPushFront(ListNode* list, DataType elem);
// 带头单链表头部删除
void SingleHeadListPopFront(ListNode* list);
// 带头单链表尾部插入
void SingleHeadListPushBack(ListNode* list, DataType elem);
// 带头单链表尾部删除
void SingleHeadListPopBack(ListNode* list);
// 带头单链表pos位置后插入x
void SingleHeadListInsertAfter(ListNode* list, size_t pos, DataType elem);
// 带头单链表删除pos位置后元素
void SingleHeadListEraseAfter(ListNode* list, size_t pos);
// 带头单链表查找元素 - 返回对应元素节点
ListNode* SingleHeadListFind(ListNode* list, DataType data);
// 带头单链表长度
size_t SingleHeadListLength(ListNode* list);
// 带头单链表单链表
void SingleHeadListTraverse(ListNode* list);